perm filename PUZB.SAI[226,JMC] blob sn#005391 filedate 1972-05-29 generic text, type T, neo UTF8
00100	BEGIN 	"PUZZLE"
00200		REQUIRE 30000 SYSTEM_PDL;
00300		INTEGER ARRAY S[1:43,1:43],G[1:43,1:43],MM[1:43,1:43];
00400	INTEGER M,N;
00500	PRELOAD_WITH 4,2,1,2,3,1,5,2,3,3,2,2,3,5,3,2,3,2,3,2,2,3,5,1,2,
00600	3,5,1,3,2,1,3,2,3,3,2,3,1,5,3,2,1,2;
00700	INTEGER ARRAY Q[1:43];
00800	
00900	FORWARD RECURSIVE INTEGER PROCEDURE CMOAN(INTEGER M,N);
01000	FORWARD RECURSIVE INTEGER PROCEDURE CGROAN(INTEGER M,N);
01100	
01200	RECURSIVE INTEGER PROCEDURE CSENT(INTEGER M,N);
01300	BEGIN
01400	INTEGER T,P,R,J;
01500	IF M>N THEN RETURN(1);
01600	IF S[M,N]≠-1 THEN RETURN(S[M,N]);
01700	T←0;
01800	FOR P←M STEP 1 UNTIL N DO
01900	IF Q[P] =1 THEN T ← T+ CMOAN(M,P-1)*CGROAN(P+1,N)
02000	ELSE IF Q[P]=5 THEN BEGIN R←CGROAN(M,P-1);
02100	FOR J←P STEP 1 UNTIL N DO
02200	T← T+R*CSENT(P+1,J)*CMOAN(J+1,N) END;
02300	RETURN(S[M,N]←T) END;
02400	
02500	RECURSIVE INTEGER PROCEDURE CMOAN(INTEGER M,N);
02600	BEGIN
02700	INTEGER T,P,R,J;
02800	IF M>N THEN RETURN(1);
02900	IF MM[M,N]≠-1 THEN RETURN(MM[M,N]);
03000	T←0;
03100	FOR P←M STEP 1 UNTIL N DO
03200	IF Q[P] =2 THEN T ← T+ CSENT(M,P-1)*CSENT(P+1,N)
03300	ELSE IF Q[P]=3 THEN BEGIN R←CGROAN(M,P-1);
03400	FOR J←P STEP 1 UNTIL N DO
03500	T← T+R*CMOAN(P+1,J)*CGROAN(J+1,N) END;
03600	RETURN(MM[M,N]←T) END;
03700	
03800	RECURSIVE INTEGER PROCEDURE CGROAN(INTEGER M,N);
03900	BEGIN
04000	INTEGER T,P,R,J;
04100	IF M>N THEN RETURN(1);
04200	IF G[M,N]≠-1 THEN RETURN(G[M,N]);
04300	T←0;
04400	FOR P←M STEP 1 UNTIL N DO
04500	IF Q[P] =3 THEN T ← T+ CMOAN(M,P-1)*CGROAN(P+1,N)
04600	ELSE IF Q[P]=4 THEN BEGIN R←CGROAN(M,P-1);
04700	FOR J←P STEP 1 UNTIL N DO
04800	T← T+R*CSENT(P+1,J)*CGROAN(J+1,N) END;
04900	RETURN(G[M,N]←T) END;
05000	
05100	FOR M←1 STEP 1 UNTIL 43 DO
05200	FOR N←1 STEP 1 UNTIL 43 DO
05300	BEGIN S[M,N]←MM[M,N]←G[M,N]←-1 END;
05400	
05500	OUTSTR("
05600	"&CVS(CSENT(1,43))&"
05700	");
05800	END;